#ifndef CNC_BASE_MILL_DATA_MODEL_H
#define CNC_BASE_MILL_DATA_MODEL_H

namespace cnc {

	namespace base {

		namespace MOTION_TYPE {
			enum {
				ID = 0x10
			};
			enum {
				MT_LINEAR,
				MT_RAPID,
				MT_CLOCKWISE,
				MT_COUNTERCLOCKWISE
			};
		}

		namespace CARTESIAN_PLANE {
			enum {
				ID = 0x11
			};
			enum {
				CP_XY,
				CP_XZ,
				CP_YZ
			};
		}

		namespace METRIC_SYSTEM {
			enum {
				ID = 0x12
			};
			enum {
				MS_INTERNATIONAL,
				MS_ENGLISH
			};
		}

		namespace DIMENSIONING_MODE {
			enum {
				ID = 0x13
			};
			enum {
				DM_ABSOLUTE,
				DM_INCREMENTAL
			};
		}

		namespace CUTTING_MODE {
			enum {
				ID = 0x14
			};
			enum {
				CM_NORMAL,
				CM_EXACT_STOP,
				CM_AUTOMATIC_CORNER_OVERRIDE,
				CM_TAPPING
			};
		}

		namespace AXIS_TARGET_POSITION {
			enum {
				ID = 0x15
			};
			enum {
				ATP_X = 0x16,
				ATP_Y = 0x17,
				ATP_Z = 0x18
			};
		}

		namespace ACTIVE_WORK_OFFSET_INDEX {
			enum {
				ID = 0x19
			};
		}

		namespace ACTIVE_TOOL_OFFSET_INDEX {
			enum {
				ID = 0x1A
			};
		}

		namespace CUTTING_FEEDRATE {
			enum {
				ID = 0x1B
			};
		}

		namespace CUTTING_FEEDRATE_OVERRIDE {
			enum {
				ID = 0x1C
			};
		}

		namespace JOG_FEEDRATE_OVERRIDE {
			enum {
				ID = 0x1D
			};
		}

		namespace RAPID_TRAVERSE_RATE_OVERRIDE {
			enum {
				ID = 0x1E
			};
		}

		namespace CURRENT_POSITION {
			enum {
				ID = 0x1F
			};
			enum {
				CP_X = 0x20,
				CP_Y = 0x21,
				CP_Z = 0x22
			};
		}

		namespace MACHINING_CYCLE_STATUS {
			enum {
				ID = 0x23
			};
			enum {
				MCS_FEEDHOLD,
				MCS_AXES_MOVING
			};
		}

		namespace BLOCK_EXECUTION {
			enum {
				ID = 0x24
			};
			enum {
				BE_SINGLE_BLOCK,
				BE_CONTINUOUS
			};
		}

		namespace OPTIONAL_STOP {
			enum {
				ID = 0x25
			};
			enum {
				OS_STOP,
				OS_SKIP
			};
		}

		namespace BLOCK_SKIP {
			enum {
				ID = 0x26
			};
			enum {
				BS_SKIP,
				BS_READ
			};
		}

		namespace DRY_RUN {
			enum {
				ID = 0x27
			};
			enum {
				DR_DRY,
				DR_NORMAL
			};
		}

		namespace MST_LOCK {
			enum {
				ID = 0x28
			};
			enum {
				ML_LOCKED,
				ML_NORMAL
			};
		}

		namespace AXIS_LOCK {
			enum {
				XY_ID = 0x29,
				Z_ID = 0x2A
			};
			enum {
				AL_LOCKED,
				AL_NORMAL
			};
		}

		namespace AXIS_HARD_LIMIT_SWITCH {
			enum {
				LEFT_X_ID = 0x2B,
				RIGHT_X_ID = 0x2C,
				LEFT_Y_ID = 0x2D,
				RIGHT_Y_ID = 0x2E,
				LEFT_Z_ID = 0x2F,
				RIGHT_Z_ID = 0x30
			};
			enum {
				ENABLED,
				DISABLED
			};
		}

		namespace NEXT_TOOL_INDEX {
			enum {
				ID = 0x31
			};
		}

		namespace HOMING_HIGH_TRAVERSE_RATE {
			enum {
				ID = 0x32
			};
		}

		namespace HOMING_LOW_TRAVERSE_RATE {
			enum {
				ID = 0x33
			};
		}

		namespace DEFAULT_CUTTING_FEEDRATE {
			enum {
				ID = 0x34
			};
		}

		namespace MAXIMUM_CUTTING_FEEDRATE {
			enum {
				ID = 0x35
			};
		}

		/*namespace JOG_FEEDRATE {
			enum {
				ID = 0x36
			};
		}*/

		namespace MAXIMUM_JOG_FEEDRATE {
			enum {
				ID = 0x37
			};
		}

		namespace RAPID_TRAVERSE_RATE {
			enum {
				ID = 0x38
			};
		}

		namespace USER_RAPID_TRAVERSE_OVERRIDE {
			enum {
				ID = 0x39
			};
		}

		namespace ZERO_RETURN_TRAVERSE_RATE {
			enum {
				FAST_ID = 0x3A,
				SLOW_ID = 0x3B
			};
		}

		namespace MAXIMUM_TRAVERSE_RATE {
			enum {
				ID = 0x3C
			};
		}

		namespace AXES_MOTION_TRAVEL_RANGE {
			enum {
				X_ID = 0x3D,
				Y_ID = 0x3E,
				Z_ID = 0x3F
			};
		}

		namespace AXES_REFERENCE_POINT_RETURN_DIRECTION {
			enum {
				X_ID = 0x40,
				Y_ID = 0x41,
				Z_ID = 0x42
			};
			enum {
				NEGATIVE,
				POSITIVE
			};
		}

		namespace MINIMUM_SPINDLE_SPEED {
			enum {
				ID = 0x43
			};
		}

		namespace MAXIMUM_SPINDLE_SPEED {
			enum {
				ID = 0x44
			};
		}

		namespace MINIMUM_SPINDLE_SPEED_OVERIDE {
			enum {
				ID = 0x45
			};
		}

		namespace MAXIMUM_SPINDLE_SPEED_OVERIDE {
			enum {
				ID = 0x46
			};
		}

		namespace TOOL_MAGAZINE_CAPACITY {
			enum {
				ID = 0x47
			};
		}

		namespace MAXIMUM_TOOL_INDEX {
			enum {
				ID = 0x48
			};
		}

		namespace TOOL_SELECTION_TYPE {
			enum {
				ID = 0x49
			};
			enum {
				FIXED,
				RANDOM
			};
		}

		namespace SELECTED_TOOL_INDEX {
			enum {
				ID = 0x4A
			};
		}

		namespace MAXIMUM_TOOL_DIAMETER {
			enum {
				ID = 0x4B
			};
		}

		namespace MAXIMUM_TOOL_LENGHT {
			enum {
				ID = 0x4C
			};
		}

		namespace NUMBER_OF_DEVICES {
			enum {
				ID = 0x4D
			};
		}

		namespace DEFAULT_METRIC_SYSTEM {
			enum {
				ID = 0x4E
			};
		}

		namespace NUM_WORK_OFFSETS {
			enum {
				ID = 0x4F
			};
		}

		namespace DEFAULT_DIMENSIONING_MODE {
			enum {
				ID = 0x50
			};
		}

		namespace WORK_OFFSET {
			enum {
				ID = 0x51
			};
		}

		namespace TOOL_OFFSET {
			enum {
				ID = 0x52
			};
		}

	} // namespace base

} // namespace cnc

#endif
